home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
576-600
/
579
/
cass
/
cass_pal.p
< prev
next >
Wrap
Text File
|
1995-03-15
|
24KB
|
692 lines
program CassetteCoverPrinter_PAL;
{ This program prints out cassette labels either as ASCII-Files or as source
for use with LaTeX.
PAL Version 1.1
©1991 by Jörn Clausen }
{ Get the right stuff. }
uses Intuition,Graphics;
from Windows uses ArpFilerequester;
{ A few useful things. }
const spaces=" ";
line="+-------------------------------------------------------------------+";
fileIDstandard="CASSDATA"
{ This one needed for all the borders. }
type IntArr10=array [1..10] of integer;
{ Loads of definitions. }
var MyScreen : ^Screen;
MyWindow : ^Window;
Msg : ^IntuiMessage;
Running,success : boolean;
ProjMen,PrinMen : Menu;
Clear,Load,Save,About,Quit,ASCII,LaTeX,
ToFile,ToPrinter : MenuItem;
SongGad : array [1..30] of Gadget;
SongTexInfo : array [1..30] of StringInfo;
SongTex,UndoSongTex,OtherSideTex : array [1..30] of String[32];
TitleGad : array [1..4] of Gadget;
TitleTexInfo : array [1..4] of StringInfo;
TitleTex,UndoTitleTex : array [1..4] of String[32];
NRGad,SourceGad,DateGad : array [1..2] of Gadget;
DateTexInfo : array [1..2] of StringInfo;
DateTex,UndoDateTex : array [1..2] of String[11];
LengthGad,PosGad,SwitchGad : Gadget;
TextBord,NRBord,SourceBord,DateBord,
LengthBord,PosBord,SwitchBord : Border;
TextBordXY,NRBordXY,SourceBordXY,
DateBordXY,LengthBordXY,PosBordXY,
SwitchBordXY : IntArr10;
NRGadText,SourceGadText,DateIText,
LengthGadText,PosGadText,SwitchGadText,
ClearIText,LoadIText,SaveIText,AboutIText,
QuitIText,ASCIIIText,LaTeXIText,
ToFileIText,ToPrinterIText : IntuiText;
Side,Length,Pos : integer;
NR,Source : array [1..2] of integer;
NRText : array [1..5] of String[9];
LengthText : array [1..5] of String[4];
PosText : array [1..3] of String[7];
SourceText : array [1..9] of String[9];
Picked,PMenu,PMenuItem,PMenuSubItem : integer;
ClickGad : ^Gadget;
Output : text;
{ This looks rather ugly, but how can I convert integers to strings without
causing too much problems? }
procedure PrintNumbers;
var start,i,j : integer;
NumIText : IntuiText;
Number : String;
begin
for j:=1 to 15 do
begin
start:=Side*15;
i:=j+start;
if i<10 then
Number:=Concat(' ',chr(i+48));
if (i>9) and (i<20) then
Number:=Concat('1',chr(i+38));
if (i>19) and (i<30) then
Number:=Concat('2',chr(i+28));
if i=30 then Number:='30';
NumIText:=IntuiText(1,0,JAM2,0,0,nil,Number,nil);
PrintIText(MyWindow^.RPort,^NumIText,310,11*j+3);
end;
end;
procedure PrintNR(NRSide:integer);
var NRIText : IntuiText;
begin
NRIText:=IntuiText(1,0,JAM2,0,0,nil,NRText[NR[NRSide]],nil);
PrintIText(MyWindow^.RPort,^NRIText,340*(NRSide-1)+62,211);
end;
procedure PrintSource(SourceSide:integer);
var SourceIText : IntuiText;
begin
SourceIText:=IntuiText(1,0,JAM2,0,0,nil,SourceText[Source[SourceSide]],nil);
PrintIText(MyWindow^.RPort,^SourceIText,340*(SourceSide-1)+217,211);
end;
procedure PrintLength;
var LengthIText : IntuiText;
begin
LengthIText:=IntuiText(1,0,JAM2,0,0,nil,LengthText[Length],nil);
PrintIText(MyWindow^.RPort,^LengthIText,164,242);
end;
procedure PrintPos;
var PosIText : IntuiText;
begin
PosIText:=IntuiText(1,0,JAM2,0,0,nil,PosText[Pos],nil);
PrintIText(MyWindow^.RPort,^PosIText,333,242);
end;
{ Define tape sorts, lengths, noise reductions etc. Adjust them according to
your special needs. }
procedure DoVariables;
begin
NR[1]:=4; NR[2]:=4;
NRText[1]:='None '; NRText[2]:='Dolby B '; NRText[3]:='Db B MPX';
NRText[4]:='Dolby C '; NRText[5]:='Db C MPX';
Source[1]:=1; Source[2]:=1;
SourceText[1]:='CD '; SourceText[2]:='Phono ';
SourceText[3]:='Tuner '; SourceText[4]:='DAT ';
SourceText[5]:='Tape '; SourceText[6]:='Video ';
SourceText[7]:='TV '; SourceText[8]:='Computer';
SourceText[9]:=' ';
Length:=4;
LengthText[1]:='30 '; LengthText[2]:='45 '; LengthText[3]:='60 ';
LengthText[4]:='90 '; LengthText[5]:='120';
Pos:=2;
PosText[1]:='Normal'; PosText[2]:='Chrome'; PosText[3]:='Metal ';
Side:=0;
end;
{ Open Screen and Window. OK, OK, I know, this should be done more carefully,
but this is the way described in the handbook. I guess, that Open_Screen and
Open_Window, which are special Kick-Pascal functions, check if they return a
screen or a window. For this reason I don't check it again.}
procedure DoScreen;
begin
MyScreen:=Open_Screen(0,0,640,256,2,0,1,HIRES,'Cassette Cover Printer V1.1');
MyWindow:=Open_Window(0,0,640,256,1,GADGETUP+GADGETDOWN+MENUPICK+_CLOSEWINDOW,WINDOWDEPTH+WINDOWCLOSE+ACTIVATE,'Cassette Cover Printer V1.1',MyScreen,320,640,320,640);
end;
{ Define the pull-down-menus. }
procedure DoMenu;
begin
ProjMen:=Menu(^PrinMen,10,0,90,10,MENUENABLED,'Project',^Load,0,0,0,0);
Load:=MenuItem(^Save,0,0,90,10,ITEMTEXT+ITEMENABLED+HIGHCOMP+COMMSEQ,0,^LoadIText,nil,'O',nil,0);
LoadIText:=IntuiText(0,1,JAM2,1,1,nil,'Open',nil);
Save:=MenuItem(^Clear,0,10,90,10,ITEMTEXT+ITEMENABLED+HIGHCOMP+COMMSEQ,0,^SaveIText,nil,'S',nil,0);
SaveIText:=IntuiText(0,1,JAM2,1,1,nil,'Save',nil);
Clear:=MenuItem(^About,0,20,90,10,ITEMTEXT+ITEMENABLED+HIGHCOMP+COMMSEQ,0,^ClearIText,nil,'C',nil,0);
ClearIText:=IntuiText(0,1,JAM2,1,1,nil,'Clear',nil);
About:=MenuItem(^Quit,0,30,90,10,ITEMTEXT+ITEMENABLED+HIGHCOMP,0,^AboutIText,nil,chr(0),nil,0);
AboutIText:=IntuiText(0,1,JAM2,1,1,nil,'About',nil);
Quit:=MenuItem(nil,0,40,90,10,ITEMTEXT+ITEMENABLED+HIGHCOMP,0,^QuitIText,nil,chr(0),nil,0);
QuitIText:=IntuiText(0,1,JAM2,1,1,nil,'Quit',nil);
PrinMen:=Menu(nil,120,0,90,10,MENUENABLED,'Print',^ASCII,0,0,0,0);
ASCII:=MenuItem(^LaTeX,0,0,90,10,ITEMTEXT+ITEMENABLED+HIGHNONE,0,^ASCIIIText,nil,chr(0),^ToPrinter,0);
ASCIIIText:=IntuiText(0,1,JAM2,1,1,nil,'ASCII',nil);
ToPrinter:=MenuItem(^ToFile,90,0,130,10,ITEMTEXT+ITEMENABLED+HIGHCOMP+COMMSEQ,0,^ToPrinterIText,nil,'P',nil,0);
ToPrinterIText:=IntuiText(0,1,JAM2,1,1,nil,'to Printer',nil);
ToFile:=MenuItem(nil,90,10,130,10,ITEMTEXT+ITEMENABLED+HIGHCOMP+COMMSEQ,0,^ToFileIText,nil,'F',nil,0);
ToFileIText:=IntuiText(0,1,JAM2,1,1,nil,'to File',nil);
LaTeX:=MenuItem(nil,0,10,90,10,ITEMTEXT+ITEMENABLED+HIGHCOMP+COMMSEQ,0,^LaTeXIText,nil,'L',nil,0);
LaTeXIText:=IntuiText(0,1,JAM2,1,1,nil,'LaTeX',nil);
SetMenuStrip(MyWindow,^ProjMen);
end;
{ And define all the gadgets. }
procedure DoGadgets;
var i : integer;
begin
TextBord:=Border(0,0,1,0,JAM1,5,^TextBordXY,nil);
TextBordXY:=IntArr10(-3,-2,258,-2,258,9,-3,9,-3,-2);
for i:=1 to 15 do
begin
SongGad[i]:=Gadget(nil,22,11*i+3,255,8,GADGHCOMP,GADGIMMEDIATE+RELVERIFY,STRGADGET,^TextBord,nil,nil,0,^SongTexInfo[i],i,0);
SongTexInfo[i]:=StringInfo(^SongTex[i],^UndoSongTex[i],0,32,0,0,0,0,0,0,nil,0,nil);
SongTex[i]:=''; UndoSongTex[i]:=''; OtherSideTex[i]:='';
AddGadget(MyWindow,^SongGad[i],nil);
SongGad[i+15]:=Gadget(nil,362,11*i+3,255,8,GADGHCOMP,GADGIMMEDIATE+RELVERIFY,STRGADGET,^TextBord,nil,nil,0,^SongTexInfo[i+15],i+15,0);
SongTexInfo[i+15]:=StringInfo(^SongTex[i+15],^UndoSongTex[i+15],0,32,0,0,0,0,0,0,nil,0,nil);
SongTex[i+15]:=''; UndoSongTex[i+15]:=''; OtherSideTex[i+15]:='';
AddGadget(MyWindow,^SongGad[i+15],nil);
end;
for i:=1 to 2 do
begin
TitleGad[i]:=Gadget(nil,22,11*i+173,255,8,GADGHCOMP,GADGIMMEDIATE+RELVERIFY,STRGADGET,^TextBord,nil,nil,0,^TitleTexInfo[i],i+30,0);
TitleTexInfo[i]:=StringInfo(^TitleTex[i],UndoTitleTex[i],0,32,0,0,0,0,0,0,nil,0,nil);
TitleTex[i]:=''; UndoTitleTex[i]:='';
AddGadget(MyWindow,^TitleGad[i],nil);
TitleGad[i+2]:=Gadget(nil,362,11*i+173,255,8,GADGHCOMP,GADGIMMEDIATE+RELVERIFY,STRGADGET,^TextBord,nil,nil,0,^TitleTexInfo[i+2],i+32,0);
TitleTexInfo[i+2]:=StringInfo(^TitleTex[i+2],UndoTitleTex[i+2],0,32,0,0,0,0,0,0,nil,0,nil);
TitleTex[i+2]:=''; UndoTitleTex[i+2]:='';
AddGadget(MyWindow,^TitleGad[i+2],nil);
end;
NRBord:=Border(0,0,1,0,JAM1,5,^NRBordXY,nil);
NRBordXY:=IntArr10(-4,-2,23,-2,23,9,-4,9,-4,-2);
NRGadText:=IntuiText(1,0,JAM1,2,0,nil,'NR',nil);
for i:=1 to 2 do
begin
NRGad[i]:=Gadget(nil,340*(i-1)+23,211,20,8,GADGHBOX,RELVERIFY,BOOLGADGET,^NRBord,nil,^NRGadText,0,nil,34+i,0);
AddGadget(MyWindow,^NRGad[i],nil);
PrintNR(i);
end;
SourceBord:=Border(0,0,1,0,JAM1,5,^SourceBordXY,nil);
SourceBordXY:=IntArr10(-4,-2,53,-2,53,9,-4,9,-4,-2);
SourceGadText:=IntuiText(1,0,JAM1,1,0,nil,'Source',nil);
for i:=1 to 2 do
begin
SourceGad[i]:=Gadget(nil,340*(i-1)+148,211,50,8,GADGHBOX,RELVERIFY,BOOLGADGET,^SourceBord,nil,^SourceGadText,0,nil,36+i,0);
AddGadget(MyWindow,^SourceGad[i],nil);
PrintSource(i);
end;
DateBord:=Border(0,0,1,0,JAM1,5,^DateBordXY,nil);
DateBordXY:=IntArr10(-3,-2,90,-2,90,9,-3,9,-3,-2);
DateIText:=IntuiText(1,0,JAM1,0,0,nil,'Date',nil);
for i:=1 to 2 do
begin
DateGad[i]:=Gadget(nil,340*(i-1)+69,227,87,8,GADGHCOMP,GADGIMMEDIATE,STRGADGET,^DateBord,nil,nil,0,^DateTexInfo[i],38+i,0);
DateTexInfo[i]:=StringInfo(^DateTex[i],^UndoDateTex[i],0,11,0,0,0,0,0,0,nil,0,nil);
DateTex[i]:=''; UndoDateTex[i]:='';
AddGadget(MyWindow,^DateGad[i],nil);
PrintIText(MyWindow^.RPort,^DateIText,340*(i-1)+20,227);
end;
LengthBord:=Border(0,0,1,0,JAM1,5,^LengthBordXY,nil);
LengthBordXY:=IntArr10(-4,-2,21,-2,21,9,-4,9,-4,-2);
LengthGadText:=IntuiText(1,0,JAM1,5,0,nil,'C',nil);
LengthGad:=Gadget(nil,128,242,18,8,GADGHBOX,RELVERIFY,BOOLGADGET,^LengthBord,nil,^LengthGadText,0,nil,41,0);
AddGadget(MyWindow,^LengthGad,nil);
PrintLength;
PosBord:=Border(0,0,1,0,JAM1,5,^PosBordXY,nil);
PosBordXY:=IntArr10(-4,-2,70,-2,70,9,-4,9,-4,-2);
PosGadText:=IntuiText(1,0,JAM1,2,0,nil,'Position',nil);
PosGad:=Gadget(nil,247,242,67,8,GADGHBOX,RELVERIFY,BOOLGADGET,^PosBord,nil,^PosGadText,0,nil,42,0);
AddGadget(MyWindow,^PosGad,nil);
PrintPos;
SwitchBord:=Border(0,0,1,0,JAM1,5,^SwitchBordXY,nil);
SwitchBordXY:=IntArr10(-4,-2,101,-2,101,9,-4,9,-4,-2);
SwitchGadText:=IntuiText(1,0,JAM1,1,0,nil,'Switch Sides',nil);
SwitchGad:=Gadget(nil,430,242,98,8,GADGHBOX,RELVERIFY,BOOLGADGET,^SwitchBord,nil,^SwitchGadText,0,nil,43,0);
AddGadget(MyWindow,^SwitchGad,nil);
PrintNumbers;
RefreshGadgets(MyWindow^.FirstGadget,MyWindow,nil);
end;
{ Switch to next noise redurction, source, etc. }
procedure NextNR(NRSide:integer);
begin
if NR[NRSide]=5 then
NR[NRSide]:=1
else
NR[NRSide]:=Succ(NR[NRSide]);
PrintNR(NRSide);
end;
procedure NextSource(SourceSide:integer);
begin
if Source[SourceSide]=9 then
Source[SourceSide]:=1
else
Source[SourceSide]:=Succ(Source[SourceSide]);
PrintSource(SourceSide);
end;
procedure NextLength;
begin
if Length=5 then
Length:=1
else
Length:=Succ(Length);
PrintLength;
end;
procedure NextPos;
begin
if Pos=3 then
Pos:=1
else
Pos:=Succ(Pos);
PrintPos;
end;
procedure SwitchSides;
var i : integer;
dummy : String[32];
begin
for i:=1 to 30 do
begin
dummy:=SongTex[i];
SongTex[i]:=OtherSideTex[i];
OtherSideTex[i]:=dummy;
end;
RefreshGadgets(MyWindow^.FirstGadget,MyWindow,nil);
if Side=0 then
Side:=1
else
Side:=0;
PrintNumbers;
end;
{ Load data-file. }
procedure LoadData;
var i : integer;
filename,fileID : string;
BodyIText,PosIText,NegIText : IntuiText;
loadfile,answer : boolean;
begin
loadfile:=false;
while not loadfile do
begin
filename:=FileReq(MyWindow,'Load Data');
if filename='' then exit;
Reset(Output,filename);
readln(Output,fileID);
if fileID=fileIDstandard then loadfile:=true else
begin
BodyIText:=IntuiText(0,1,JAM2,30,5,nil,'This is no Data-File',nil);
PosIText:=IntuiText(0,1,JAM2,6,3,nil,'Retry',nil);
NegIText:=IntuiText(0,1,JAM2,6,3,nil,'Cancel',nil);
answer:=AutoRequest(MyWindow,^BodyIText,^PosIText,^NegIText,RELVERIFY,RELVERIFY,250,60);
if answer=false then exit;
end;
end;
if side=1 then SwitchSides;
for i:=1 to 4 do
readln(Output,TitleTex[i]);
for i:=1 to 15 do
readln(Output,SongTex[i]);
for i:=1 to 15 do
readln(Output,OtherSideTex[i]);
for i:=16 to 30 do
readln(Output,SongTex[i]);
for i:=16 to 30 do
readln(Output,OtherSideTex[i]);
for i:=1 to 2 do
begin
readln(Output,NR[i]);
readln(Output,Source[i]);
readln(Output,DateTex[i]);
end;
readln(Output,Length);
readln(Output,Pos);
Close(Output);
RefreshGadgets(MyWindow^.FirstGadget,MyWindow,nil);
for i:=1 to 2 do
begin
PrintNR(i);
PrintSource(i);
end;
PrintLength;
PrintPos;
end;
{ Save data-file. }
procedure SaveData;
var i : integer;
filename : string;
begin
filename:=FileReq(MyWindow,'Save Data');
if filename<>'' then
begin
if Side=1 then SwitchSides;
Rewrite(Output,filename);
writeln(Output,fileIDstandard);
for i:=1 to 4 do
writeln(Output,TitleTex[i]);
for i:=1 to 15 do
writeln(Output,SongTex[i]);
for i:=1 to 15 do
writeln(Output,OtherSideTex[i]);
for i:=16 to 30 do
writeln(Output,SongTex[i]);
for i:=16 to 30 do
writeln(Output,OtherSideTex[i]);
for i:=1 to 2 do
begin
writeln(Output,NR[i]);
writeln(Output,Source[i]);
writeln(Output,DateTex[i]);
end;
writeln(Output,Length);
writeln(Output,Pos);
Close(Output);
DisplayBeep(MyScreen);
end;
end;
{ Erase present contents of the gadgest. }
procedure ClearData;
var i : integer;
BodyIText,PosIText,NegIText : IntuiText;
answer : boolean;
begin
BodyIText:=IntuiText(0,1,JAM2,7,5,nil,'Data will be lost! Continue?',nil);
PosIText:=IntuiText(0,1,JAM2,6,3,nil,'Yes, Please',nil);
NegIText:=IntuiText(0,1,JAM2,6,3,nil,'Oh, No!',nil);
answer:=AutoRequest(MyWindow,^BodyIText,^PosIText,^NegIText,RELVERIFY,RELVERIFY,260,60);
if answer=false then exit;
for i:=1 to 30 do
begin
SongTex[i]:=''; UndoSongTex[i]:='';
OtherSideTex[i]:='';
end;
for i:=1 to 4 do
begin
TitleTex[i]:=''; UndoTitleTex[i]:='';
end;
DateTex[1]:=''; UndoDateTex[1]:='';
DateTex[2]:=''; UndoDateTex[2]:='';
DoVariables;
RefreshGList(MyWindow^.FirstGadget,MyWindow,nil,-1);
PrintNumbers;
PrintNR(1); PrintNR(2);
PrintSource(1); PrintSource(2);
PrintLength;
PrintPos;
end;
{ Output line to whatever will receive it, either PRT: or a file. }
procedure PrintLine(TexA,TexB:String;Middle:Char);
var PTexA,PTexB : string;
begin
PTexA:=TexA+Copy(spaces,1,31-StrLen(TexA));
PTexB:=TexB+Copy(spaces,1,31-StrLen(TexB));
writeln(Output,"| "+PTexA+" "+Middle+" "+PTexB+" |");
end;
{ Print the cover made out of ASCII-character. }
procedure OutputCover(filename:string);
var i : integer;
Middle : char;
pron,proff : string;
ExtPrint : boolean;
begin
pron:=chr(27)+"[4w"+chr(27)+"[2"+chr(34)+"z"+chr(27)+"(B";
proff:=chr(27)+"[0w"+chr(27)+"[1"+chr(34)+"z";
if Side=1 then SwitchSides;
ExtPrint:=false;
for i:=1 to 30 do
if OtherSideTex[i]<>'' then ExtPrint:=True;
ReWrite(Output,filename);
write(Output,pron);
writeln(Output,line);
if ExtPrint then
begin
for i:=1 to 15 do
PrintLine(OtherSideTex[i],OtherSideTex[i+15],"|");
writeln(Output,line);
end;
Middle:="|"
for i:=1 to 15 do
begin
if ExtPrint and (i=15) then Middle:="V";
PrintLine(SongTex[i],SongTex[i+15],Middle);
end;
writeln(Output,line);
PrintLine(TitleTex[1],TitleTex[2]," ");
PrintLine(TitleTex[3],TitleTex[4]," ");
writeln(Output,line);
PrintLine("NR: "+NRText[NR[1]]+" Source: "+SourceText[Source[1]],"NR: "+NRText[NR[2]]+" Source: "+SourceText[Source[2]],"|");
PrintLine("Date: "+DateTex[1],"Date: "+DateTex[2],"|");
writeln(Output,"|"+Copy(spaces,1,15)+"C"+LengthText[Length]+Copy(spaces,1,24)+"Position: "+PosText[Pos]+Copy(spaces,1,8)+"|");
writeln(Output,line);
writeln(Output,proff);
Close(Output);
DisplayBeep(MyScreen);
end;
{ Send cover to printer. }
procedure PrintCover;
begin
OutputCover('prt:');
end;
{ Send cover to file. }
procedure SaveCover;
var filename:string;
begin
filename:=FileReq(MyWindow,'Save Cover');
if filename<>'' then OutputCover(filename);
end;
{ Produce LaTeX-file. }
procedure SaveLaTeX;
var i : integer;
filename : string;
ExtPrint : boolean;
begin
filename:=FileReq(MyWindow,'Save LaTeX Source File');
if filename<>'' then
begin
ExtPrint:=false;
if Side=1 then SwitchSides;
for i:=1 to 30 do
if OtherSideTex[i]<>'' then ExtPrint:=True;
Rewrite(Output,filename);
writeln(Output,'\documentstyle{article}');
writeln(Output,'\begin{document}');
writeln(Output,'\pagestyle{empty}');
writeln(Output,'\unitlength1mm');
writeln(Output);
if ExtPrint then
begin
writeln(Output,'\begin{picture}(102,161)(0,0)');
writeln(Output,' \put(0,0){\framebox(102,161){}}');
writeln(Output,' \put(51,29){\line(0,1){132}}');
writeln(Output,' \put(0,95){\line(1,0){102}}');
end
else
begin
writeln(Output,'\begin{picture}(102,95)(0,0)');
writeln(Output,' \put(0,0){\framebox(102,95){}}');
writeln(Output,' \put(51,29){\line(0,1){66}}');
end;
writeln(Output,' \put(0,16){\framebox(102,13){}}');
writeln(Output,' \put(0,6){\line(1,0){102}}');
writeln(Output,' \put(51,6){\line(0,1){10}}');
writeln(Output);
writeln(Output,' \put(0,1){\makebox(51,5){C'+LengthText[Length]+'}}');
writeln(Output,' \put(51,1){\makebox(51,5){Position: '+PosText[Pos]+'}}');
writeln(Output,' \put(1,6){\makebox(24,5)[l]{Date: '+DateTex[1]+'}}');
writeln(Output,' \put(52,6){\makebox(24,5)[l]{Date: '+DateTex[2]+'}}');
writeln(Output,' \put(1,11){\makebox(21,5)[l]{NR: '+NRText[NR[1]]+'}}');
writeln(Output,' \put(52,11){\makebox(21,5)[l]{NR: '+NRText[NR[2]]+'}}');
writeln(Output,' \put(26,8.5){\makebox(24,5)[r]{Src: '+SourceText[Source[1]]+'}}');
writeln(Output,' \put(77,8.5){\makebox(24,5)[r]{Src: '+SourceText[Source[2]]+'}}');
writeln(Output);
writeln(Output,' \put(1,22.5){\makebox(49,5.5)[l]{\large '+TitleTex[1]+'}}');
writeln(Output,' \put(52,22.5){\makebox(49,5.5)[l]{\large '+TitleTex[2]+'}}');
writeln(Output,' \put(1,17){\makebox(49,5.5)[l]{\large '+TitleTex[3]+'}}');
writeln(Output,' \put(52,17){\makebox(49,5.5)[l]{\large '+TitleTex[4]+'}}');
writeln(Output);
if ExtPrint then
begin
for i:=1 to 15 do
writeln(Output,' \put(1,',160.7-i*4.4,'){\makebox(49,4.1)[tl]{'+OtherSideTex[i]+'}}');
writeln(Output);
for i:=1 to 15 do
writeln(Output,' \put(52,',160.7-i*4.4,'){\makebox(49,4.1)[tl]{'+OtherSideTex[i+15]+'}}');
end;
for i:=1 to 15 do
writeln(Output,' \put(1,',94.7-i*4.4,'){\makebox(49,4.1)[tl]{'+SongTex[i]+'}}');
writeln(Output);
for i:=1 to 15 do
writeln(Output,' \put(52,',94.7-i*4.4,'){\makebox(49,4.1)[tl]{'+SongTex[i+15]+'}}');
writeln(Output);
writeln(Output,'\end{picture}');
writeln(Output);
writeln(Output,'\end{document}');
Close(Output);
DisplayBeep(MyScreen);
end;
end;
{ Ahem, well, in case anybody is interested... }
procedure Copyright;
var CopyWindow:^Window;
CopyMsg:^IntuiMessage;
line1,line2,line3:IntuiText;
begin
CopyWindow:=Open_Window(150,48,340,120,1,MOUSEBUTTONS,ACTIVATE,nil,MyScreen,300,160,300,160);
line1:=IntuiText(1,0,JAM2,0,0,nil,'Cassette Cover Printer V1.1',^line2);
line2:=IntuiText(1,0,JAM2,24,28,nil,'©1991 by Jörn Clausen',^line3);
line3:=IntuiText(1,0,JAM2,44,56,nil,'This is Freeware',nil);
PrintIText(CopyWindow^.RPort,^line1,62,28);
while CopyMsg^.Class<>MOUSEBUTTONS do
begin
CopyMsg:=Wait_Port(CopyWindow^.UserPort);
CopyMsg:=Get_Msg(CopyWindow^.UserPort);
end;
Close_Window(CopyWindow);
end;
{ Hope you have enjoyed the program. }
procedure QuitProg;
var BodyIText,PosIText,NegIText : IntuiText;
answer : boolean;
begin
BodyIText:=IntuiText(0,1,JAM2,72,5,nil,'Really Quit?',nil);
PosIText:=IntuiText(0,1,JAM2,6,3,nil,'Yes, Please',nil);
NegIText:=IntuiText(0,1,JAM2,6,3,nil,'Oh, No!',nil);
answer:=AutoRequest(MyWindow,^BodyIText,^PosIText,^NegIText,RELVERIFY,RELVERIFY,260,60);
if answer=true then running:=false;
end;
{ And clean up the mess (although Kick-Pascal promisses to do all this on its
own, I prefer to close the things I used on my own). }
procedure CloseAll;
var dummy : ptr;
begin
dummy:=RemoveGList(MyWindow,MyWindow^.FirstGadget,-1);
ClearMenuStrip(MyWindow);
Close_Window(MyWindow);
Close_Screen(MyScreen);
end;
{ Finally made it to the main loop? Keep on reading. }
begin
DoVariables;
DoScreen;
DoMenu;
DoGadgets;
running:=true;
while running=true do
begin
Msg:=Wait_Port(MyWindow^.UserPort);
Msg:=Get_Msg(MyWindow^.UserPort);
case Msg^.Class of
_CLOSEWINDOW : QuitProg;
GADGETUP : begin
ClickGad:=Msg^.IAddress;
case ClickGad^.GadgetID of
1..14,16..29 : success:=ActivateGadget(^SongGad[ClickGad^.GadgetID+1],MyWindow,nil);
31,33 : success:=ActivateGadget(^TitleGad[ClickGad^.GadgetID-29],MyWindow,nil);
35 : NextNR(1);
36 : NextNR(2);
37 : NextSource(1);
38 : NextSource(2);
41 : NextLength;
42 : NextPos;
43 : SwitchSides;
OTHERWISE;
end;
end;
MENUPICK : begin
Picked:=Msg^.Code;
PMenu:=Picked and $1f;
PMenuItem:=(Picked and $7e0) div 32;
PMenuSubItem:=(Picked and $f800) div 2048;
case PMenu of
0 : case PMenuItem of
0 : LoadData;
1 : SaveData;
2 : ClearData;
3 : Copyright;
4 : QuitProg;
end;
1 : case PMenuItem of
0 : If PMenuSubItem=0 then
PrintCover
else
SaveCover;
1 : SaveLaTeX;
end;
OTHERWISE;
end;
end;
OTHERWISE;
end;
end;
CloseAll;
end.